Skip to content

Remove vestigial parity / structural-diff migration scaffolding#503

Merged
jamesfredley merged 1 commit intomasterfrom
remove-parity-migration-scaffolding
May 3, 2026
Merged

Remove vestigial parity / structural-diff migration scaffolding#503
jamesfredley merged 1 commit intomasterfrom
remove-parity-migration-scaffolding

Conversation

@jamesfredley
Copy link
Copy Markdown
Contributor

Summary

Removes ~3750 lines of vestigial migration scaffolding that compared our locally-rendered HTML against vendored snapshots of the legacy guides.grails.org output. With the migration complete and the guides themselves substantially rewritten on grails.apache.org, structural parity with the legacy site is no longer the design goal - "matches the old HTML" is now noise instead of signal.

Net diff: 10 files changed, +10 / -3763 lines.

Concrete signals this code finished its job

  • Only one parity-baseline snapshot was ever vendored (creating-your-first-grails-app-v6/index.html, ~2900 lines), so the parity check could only run for a single guide out of 93.
  • parityCheckAllGuides was registered but never added to verifyAllGuides (or any other aggregate). It only ran when invoked by hand.
  • StructuralDiffGuidesTask.groovy carried a TODO ("Integrate captured production baseline snapshots from https://guides.grails.org/<guide>/<version>/ once they are committed.") - the additional baselines that would have made it useful were never landed.

Deleted

  • buildSrc/src/main/groovy/website/qa/AdHocFixtureDiff.groovy
  • buildSrc/src/main/groovy/website/gradle/tasks/ParityCheckGuideTask.groovy
  • buildSrc/src/main/groovy/website/gradle/tasks/StructuralDiffGuidesTask.groovy
  • buildSrc/src/test/groovy/website/gradle/tasks/StructuralDiffGuidesTaskSpec.groovy
  • buildSrc/src/test/resources/parity-baseline/creating-your-first-grails-app-v6/index.html

Wire-up updates

  • RenderGuidesPlugin: drop PARITY_AGGREGATE_TASK / PARITY_BASELINE_ROOT constants, the per-guide parityCheckGuide_* registration loop, the parityTaskNames field on Wiring, and the parityCheckAllGuides aggregate registration. Render-only configuration remains intact.
  • GrailsWebsitePlugin: drop the StructuralDiffGuidesTask import, registration, and verifyAllGuides dependency.
  • AcceptanceReportTask: drop the structuralReportFile input, the StructuralDiffGuidesTask dependsOn wiring, and the structuralDiffGuides column from build/reports/acceptance.csv (header, row, AcceptanceRow, parsing, verdict merging, and detail summarization). The remaining gates (asciidoctorWarningGate, crawlBuiltGuides, cspScan) are unchanged.
  • AcceptanceReportTaskSpec: drop the per-test structural-diff CSV writes and adjust the expected acceptance.csv header / row strings.
  • README: update the verifyAllGuides description so it no longer claims to run a structural diff step.

Kept on purpose

  • GenerateRedirectStubsTask and GenerateRedirectsManifestTask remain untouched. They are NOT migration scaffolding - they generate the meta-refresh stubs deployed to the legacy guides.grails.org gh-pages branch and the _redirects.json manifest published with the main site, both of which are still load-bearing for legacy URL traffic.

Verification

  • ./gradlew :buildSrc:test --tests AcceptanceReportTaskSpec -> all 4 pass.
  • ./gradlew build validateGuides -x :buildSrc:test -> BUILD SUCCESSFUL, validateGuides reports 93 guide(s) parsed, 0 errors.
  • ./gradlew help --task verifyAllGuides -> task graph still resolves.

The 5 unrelated :buildSrc:test failures in RecordCompanionReleaseTaskSpec (4) and ValidateGuidesTaskSpec (1) are pre-existing on master (584dbff3e1) and are not caused by this change. Confirmed by git-stashing this branch and rerunning :buildSrc:test against unmodified master - same five failures.

ParityCheckGuideTask, StructuralDiffGuidesTask and their AdHocFixtureDiff
helper were one-shot migration scaffolding: they compared HTML rendered
by our local renderer against vendored snapshots of the legacy
guides.grails.org output to verify the new pipeline reproduced the same
shape. With the migration complete and the guides themselves
substantially rewritten on grails.apache.org, structural parity with the
legacy site is no longer the design goal - "matches the old HTML" is now
noise instead of signal.

Concrete signals that this code has finished its job:

- Only one parity-baseline snapshot was ever vendored
  (creating-your-first-grails-app-v6/index.html, ~2900 lines), so the
  parity check could only run for a single guide out of 93.
- parityCheckAllGuides was registered but NEVER added to verifyAllGuides
  (or any other aggregate). It only ran when invoked by hand.
- StructuralDiffGuidesTask.groovy carried a TODO ("Integrate captured
  production baseline snapshots from https://guides.grails.org/<guide>/
  <version>/ once they are committed.") - the additional baselines that
  would have made it useful were never landed.

This change deletes:
- buildSrc/src/main/groovy/website/qa/AdHocFixtureDiff.groovy
- buildSrc/src/main/groovy/website/gradle/tasks/ParityCheckGuideTask.groovy
- buildSrc/src/main/groovy/website/gradle/tasks/StructuralDiffGuidesTask.groovy
- buildSrc/src/test/groovy/website/gradle/tasks/StructuralDiffGuidesTaskSpec.groovy
- buildSrc/src/test/resources/parity-baseline/creating-your-first-grails-app-v6/index.html

And updates the wire-up:
- RenderGuidesPlugin: drop PARITY_AGGREGATE_TASK / PARITY_BASELINE_ROOT
  constants, the per-guide parityCheckGuide_* registration loop, the
  parityTaskNames field on Wiring, and the parityCheckAllGuides aggregate
  registration. Render-only configuration remains intact.
- GrailsWebsitePlugin: drop the StructuralDiffGuidesTask import,
  registration, and verifyAllGuides dependency.
- AcceptanceReportTask: drop the structuralReportFile input, the
  StructuralDiffGuidesTask dependsOn wiring, and the structuralDiffGuides
  column from build/reports/acceptance.csv (header, row, AcceptanceRow,
  parsing, verdict merging, and detail summarization). The remaining
  gates (asciidoctorWarningGate, crawlBuiltGuides, cspScan) are unchanged.
- AcceptanceReportTaskSpec: drop the per-test structural-diff CSV writes
  and adjust the expected acceptance.csv header / row strings.
- README: update the "verifyAllGuides" description so it no longer claims
  to run a structural diff step.

Kept on purpose:
- GenerateRedirectStubsTask and GenerateRedirectsManifestTask remain
  untouched. They are NOT migration scaffolding - they generate the
  meta-refresh stubs deployed to the legacy guides.grails.org gh-pages
  branch and the _redirects.json manifest published with the main site,
  both of which are still load-bearing for legacy URL traffic.

Verified:
- ./gradlew :buildSrc:test --tests AcceptanceReportTaskSpec -> all 4 pass
- ./gradlew build validateGuides -x :buildSrc:test -> BUILD SUCCESSFUL,
  validateGuides 93 guide(s) parsed, 0 errors
- ./gradlew help --task verifyAllGuides -> task graph still resolves
- The 5 unrelated :buildSrc:test failures in RecordCompanionReleaseTaskSpec
  and ValidateGuidesTaskSpec are pre-existing on master (584dbff) and
  are not caused by this change.

Net diff: 10 files changed, +10 / -3763 lines.

Assisted-by: claude-code:claude-opus-4-7
Copilot AI review requested due to automatic review settings May 3, 2026 23:53
@jamesfredley jamesfredley merged commit 328cd26 into master May 3, 2026
5 checks passed
@jamesfredley jamesfredley deleted the remove-parity-migration-scaffolding branch May 3, 2026 23:59
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Removes legacy HTML parity / structural-diff migration scaffolding from the Gradle build, now that “matching guides.grails.org HTML” is no longer a useful verification goal.

Changes:

  • Delete the parity-check / structural-diff tasks, fixtures, and baseline snapshot used for legacy structural comparison.
  • Simplify the acceptance report pipeline by removing the structural-diff gate column, inputs, and task dependencies.
  • Update plugin wiring and README to reflect the reduced verification harness.

Reviewed changes

Copilot reviewed 9 out of 10 changed files in this pull request and generated no comments.

Show a summary per file
File Description
buildSrc/src/test/resources/parity-baseline/creating-your-first-grails-app-v6/index.html Removes the only vendored legacy HTML baseline snapshot used for parity checks.
buildSrc/src/test/groovy/website/gradle/tasks/StructuralDiffGuidesTaskSpec.groovy Deletes tests for the removed structural-diff task.
buildSrc/src/test/groovy/website/gradle/tasks/AcceptanceReportTaskSpec.groovy Updates acceptance-report tests for the removed structural-diff column/input.
buildSrc/src/main/groovy/website/qa/AdHocFixtureDiff.groovy Deletes the structural comparison harness used by parity checks.
buildSrc/src/main/groovy/website/gradle/tasks/StructuralDiffGuidesTask.groovy Deletes structural fingerprinting/diffing task and report emission.
buildSrc/src/main/groovy/website/gradle/tasks/ParityCheckGuideTask.groovy Deletes per-guide parity check task against legacy snapshots.
buildSrc/src/main/groovy/website/gradle/tasks/AcceptanceReportTask.groovy Removes structural-diff gate integration from acceptance report generation.
buildSrc/src/main/groovy/website/gradle/RenderGuidesPlugin.groovy Removes parity aggregate wiring/constants and per-guide parity task registration.
buildSrc/src/main/groovy/website/gradle/GrailsWebsitePlugin.groovy Removes structural-diff task registration and verifyAllGuides dependency.
README.md Updates verifyAllGuides description to remove mention of structural diff.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants